package com.tangruojie.optional;

import com.tangruojie.entity.Author;

import java.util.Optional;

/**
 * Optional 是 Java 8 引入的一个非常重要的类，用于优雅、安全地处理“可能为 null 的值”，是防止 NullPointerException（空指针异常）的最佳实践之一。
 * Optional<T> 是一个 容器类，它要么包含一个非 null 的值，要么什么都没有（为空）。
 * 方法	                            说明
 * Optional.of(value)	            创建包含非 null 值的 Optional（若传 null 会报错）
 * Optional.ofNullable(value)	    允许传 null，null 时为 empty
 * Optional.empty()	                创建一个空的 Optional
 */

/**
 * 方法	                    说明
 * orElse(value)	        如果为空，返回默认值
 * orElseGet(Supplier)	    延迟计算默认值（更高效）
 * orElseThrow(Supplier)	如果为空就抛出异常
 */
public class OptionalDemo01 {

    public static Author getAuthor() {
        Author author = new Author(1L, "jack", 18, "中国", null);
        return null;
    }

    public static Optional<Author> getAuthorOptional() {
        Author author = new Author(2L, "jack", 18, "中国", null);
        return Optional.of(author);
    }

    public static void main(String[] args) {

        Author author = getAuthor();
        Optional<Author> optionalAuthor = Optional.ofNullable(author);
        optionalAuthor.ifPresent(System.out::println);

        Optional<Author> authorOptional = getAuthorOptional();
        authorOptional.ifPresent(System.out::println);

    }

}
